package tcu.yuyp.api;

import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpFilter;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.springframework.boot.web.servlet.ServletComponentScan;
import tcu.yuyp.pojo.R;
import tcu.yuyp.service.Utils;

import java.io.IOException;
@ServletComponentScan
@WebFilter("/travel/*")
//用于检验用户是否登录
public class LoginFilter extends HttpFilter {
    @Override
    protected void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain) throws IOException, ServletException {
        //设置响应信息的数据格式和编码信息
        res.setContentType("application/json");
        res.setCharacterEncoding("UTF-8");

        //检查用户是否登录，如果登录，用户的信息会被暂时存放到session域中
        HttpSession session = req.getSession();
        String requestURI = String.valueOf(req.getRequestURI());//获取请求的URI
        String method = req.getMethod();//获取请求的方法

        var mapper = new ObjectMapper();
        var r = new R();


        //不需要登录就可以执行的访问直接放行
        if ("/travel/login".equals(requestURI) && "POST".equals(method)
                ||  Utils.getNumberOfURI(requestURI).get("getNumberOfURI") == 2 && "GET".equals(method)) {
            //不需要登录的功能-->登录，查看邀请函列表

            super.doFilter(req, res, chain);
            return;
        }

        //需要登录之后才能执行的操作-->发布邀请函，查看邀请函详情，选择邀请函进行报名
//        User user = mapper.readValue(req.getReader(), User.class);
        if ("POST".equals(method) && Utils.getNumberOfURI(requestURI).get("getNumberOfURI")== 2
                ||   "GET".equals(method) && Utils.getNumberOfURI(requestURI).get("getNumberOfURI") == 3
                ||   "POST".equals(method) && Utils.getNumberOfURI(requestURI).get("getNumberOfURI") == 3) {
            //过滤符合登录的操作
            //判断是否登录-->session域中含有loginName的数据：如果登陆了，就一定会含有loginName的信息
            if(session.getAttribute("loginName") != null){
                //登录之后的

                super.doFilter(req, res, chain);
                return;
            }
            //需要登录而未进行登录的用户
            r.setCode(401);
            r.setMsg("请先登录");
            res.getWriter().println(mapper.writeValueAsString(r));//响应数据
        }


    }
}
